
/*
 * (a)  (C) 1990 by Adobe Systems Incorporated. All rights reserved.
 *
 * (b)  If this Sample Code is distributed as part of the Display PostScript
 *	System Software Development Kit from Adobe Systems Incorporated,
 *	then this copy is designated as Development Software and its use is
 *	subject to the terms of the License Agreement attached to such Kit.
 *
 * (c)  If this Sample Code is distributed independently, then the following
 *	terms apply:
 *
 * (d)  This file may be freely copied and redistributed as long as:
 *	1) Parts (a), (d), (e) and (f) continue to be included in the file,
 *	2) If the file has been modified in any way, a notice of such
 *      modification is conspicuously indicated.
 *
 * (e)  PostScript, Display PostScript, and Adobe are registered trademarks of
 *	Adobe Systems Incorporated.
 * 
 * (f) THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO
 *	CHANGE WITHOUT NOTICE, AND SHOULD NOT BE CONSTRUED
 *	AS A COMMITMENT BY ADOBE SYSTEMS INCORPORATED.
 *	ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY
 *	OR LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO
 *	WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR STATUTORY)
 *	WITH RESPECT TO THIS INFORMATION, AND EXPRESSLY
 *	DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, 
 *	FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT
 *	OF THIRD PARTY RIGHTS.
 */

/*
 *	PatternApp.m
 *
 *	This subclass of the application class performs the global
 *	setup needed for the Pattern application. The drawing
 *	window is created.
 *
 *	Version:	2.0
 *	Author:	Ken Fromm
 *	History:
 *			03-07-91		Added this comment.
 */

#import "PatternApp.h"
#import "DocView.h"
#import "DrawingView.h"

#import <objc/List.h>
#import <objc/hashtable.h>
#import <appkit/Button.h>
#import <appkit/Matrix.h>
#import <appkit/ScrollView.h>
#import <appkit/Window.h>
#import <appkit/nextstd.h>
#import <sys/param.h>
#import <string.h>

static NXRect			windowRect = {150, 184, 550, 600};
static NXRect			drawingRect = {0, 0, 540, 590};

/*
 *	Reflects the drawing mode as indicated by the radio buttons
 *	on the Drawing Options panel in the interface.
 */
short				DrawingStatus;

@implementation PatternApp

/*
*	Create the drawing window and place a scrollview as the content view.
*	A DrawingView instance is placed as the DocView of the ScrollView.
*/
- createWindow:(NXRect *) winRect
{
	id		docView, scrollView;

	NXRect	tempRect;

	windowId = [Window newContent:winRect
			style:NX_TITLEDSTYLE
			backing:NX_BUFFERED
			buttonMask:NX_RESIZEBUTTONMASK
			defer:NO];
	[windowId setTitle:"Patterns"];

	[Window  getContentRect:&tempRect  forFrameRect:winRect  style:NX_TITLEDSTYLE];

	scrollView = [ScrollView newFrame:&tempRect];
	[scrollView  setBorderType:SCROLLVIEW_BORDER];
	[scrollView  setHorizScrollerRequired:YES];
	[scrollView  setVertScrollerRequired:YES];

	drawingviewId = [[[DrawingView  newFrame:&drawingRect]  setClipping:NO]  allocateGState];
	docView = [[[[DocView new]  setClipping:NO] allocateGState]  setScale:1.0];

	[[docView  setDrawView:drawingviewId] free];
	[[scrollView  setDocView:docView]  free];
	[[windowId setContentView:scrollView] free];

	[drawingviewId  initPatterns];

	/*
	*	Important in 2.0 because it eliminates a problem in 2.0 that shifts the halftonephase
	*	over by 1 extra pixel, causing a noticable aberration in a halftone during a scroll.
	*/
	[[[docView  superview]  setFlipped:NO]  allocateGState];
	[docView  placeDrawView];

	[windowId makeFirstResponder:drawingviewId];
	[windowId setDelegate:self];

	[windowId  display];
	[windowId  makeKeyAndOrderFront:self];

	return self;
}

/* The window will free the its subviews. */
- free
{
	[windowId  free];

	return [super free];
}

- countMatrix
{
	return countMatrix;
}

- graphicsMatrix
{
	return graphicsMatrix;
}

- patternMatrix
{
	return patternMatrix;
}

- timingMatrix
{
	return timingMatrix;
}

- typeMatrix
{
	return typeMatrix;
}

- lockMatrix
{
	return lockMatrix;
}

- zoomMatrix
{
	return zoomMatrix;
}

- patternBox
{
	return patternBox;
}

- drawingView
{
	return drawingviewId;
}

- docView
{
	return [drawingviewId  superview];
}

- appDidInit:sender
{
	[self  createWindow:&windowRect];

	return self;
}

/*
 *	Resizes the doc view and repositions the drawing view inside the doc view.
 */
- windowDidResize:sender
{
	[[self  docView]  placeDrawView];

	return self;
}

@end
